]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
gnome-shell-extension-tool: Add a reload option
authorJonh Wendell <jonh.wendell@redhat.com>
Sat, 8 Oct 2016 18:23:45 +0000 (15:23 -0300)
committerJonh Wendell <jonh.wendell@redhat.com>
Fri, 28 Oct 2016 17:41:32 +0000 (15:41 -0200)
This might be a good fit for extension developers: With
this option one doesn't need to restart the whole Shell
in order to see their changes in effect.

https://bugzilla.gnome.org/show_bug.cgi?id=772593

src/gnome-shell-extension-tool.in

index d10d43349478d9690c91f0264a2be277b4e8a478..f6c37629cd6c30ab806432b7623028b0379efeb2 100644 (file)
@@ -17,7 +17,7 @@ except ImportError:
         print('The Python simplejson module is required')
         sys.exit(1)
 
-from gi.repository import Gio
+from gi.repository import Gio, GLib
 
 SAMPLE_EXTENSION_FILES = {
     "extension.js": """
@@ -172,6 +172,30 @@ def disable_extension(uuid):
     settings.set_strv(ENABLED_EXTENSIONS_KEY, extensions)
     print("%r is now disabled." % (uuid,), file=sys.stderr)
 
+def reload_extension(uuid):
+    settings = Gio.Settings(schema='org.gnome.shell')
+    extensions = settings.get_strv(ENABLED_EXTENSIONS_KEY)
+
+    if uuid not in extensions:
+        print("%r is not enabled or installed." % (uuid,), file=sys.stderr)
+        sys.exit(1)
+
+    proxy = Gio.DBusProxy.new_sync(Gio.bus_get_sync(Gio.BusType.SESSION, None),
+                                   Gio.DBusProxyFlags.NONE,
+                                   None,
+                                   'org.gnome.Shell',
+                                   '/org/gnome/Shell',
+                                   'org.gnome.Shell.Extensions',
+                                   None)
+    proxy.call_sync('ReloadExtension',
+                    GLib.Variant('(s)', (uuid,)),
+                    Gio.DBusCallFlags.NONE,
+                    -1,
+                    None)
+
+    print("%r reloaded." % (uuid,), file=sys.stderr)
+
+
 def main():
     parser = optparse.OptionParser()
     parser.add_option("-d", "--disable-extension", dest="disable",
@@ -180,6 +204,8 @@ def main():
                       help="Enable a GNOME Shell extension")
     parser.add_option("-c", "--create-extension", dest="create", action="store_true",
                       help="Create a new GNOME Shell extension")
+    parser.add_option("-r", "--reload-extension", dest="reload",
+                      help="Reload a GNOME Shell extension")
     options, args = parser.parse_args()
 
     if args:
@@ -195,6 +221,9 @@ def main():
     elif options.create:
         create_extension()
 
+    elif options.reload:
+        reload_extension(options.reload)
+
     else:
         parser.print_usage()
         sys.exit(1)